|
|
|
|
|
|
|
Reuse concepts |
|
Impediments to reuse |
|
Reuse case studies |
|
Objects and reuse |
|
Reuse during the design and implementation
phases |
|
Reuse and maintenance |
|
Portability |
|
Techniques for achieving portability |
|
Interoperability |
|
|
|
|
|
|
Two types of reuse |
|
Accidental reuse |
|
First, product is built |
|
Then, parts put into part database for reuse |
|
Planned reuse |
|
First, reusable parts are constructed |
|
Then, products are built using these parts |
|
|
|
|
|
|
Minor Reason |
|
It is expensive to design, implement, test,
and document software |
|
Only 15% of new code serves an original purpose
(average) |
|
Reuse of parts saves |
|
Design costs |
|
Implementation costs |
|
Testing costs |
|
Documentation costs |
|
Major Reason |
|
Maintenance |
|
Maintenance consumes two-thirds of software cost |
|
|
|
|
Not invented here (NIH) syndrome |
|
Concerns about faults in potentially reusable
routines |
|
Storage–retrieval |
|
Cost of reuse |
|
|
|
|
Theoretical maximum is 85% |
|
What can we get in practice? |
|
Consider case studies (1975 through 2000) |
|
|
|
|
|
|
Data-processing software |
|
Planned reuse of |
|
Designs |
|
6 code templates |
|
COBOL code |
|
3200 reusable modules |
|
Reuse rate 60% (1976–1982) |
|
|
|
|
|
Industrial process control systems |
|
Accidental reuse of |
|
Specifications |
|
Designs |
|
Modules |
|
Contracts |
|
Manuals |
|
Standards |
|
Reuse rate (1985) |
|
33% design |
|
48% code |
|
|
|
|
|
Ground support system for unmanned spacecraft
control |
|
Management permitted (but did not encourage)
accidental reuse |
|
Accidental reuse of |
|
Modules |
|
Reuse rate (1982) |
|
28% reused unchanged |
|
10% reused with minor changes |
|
|
|
|
|
Data-processing software |
|
Strongly encouraged by management |
|
Cash incentives when module was accepted for
reuse |
|
Cash incentive when module was reused |
|
Accidental reuse of |
|
Modules |
|
Reuse rate |
|
(1988) 15% reused code, $1.5 million saved |
|
(est. 1989) 20% reused code |
|
(est. 1993) 50% reused code |
|
|
|
|
|
Implemented in many divisions of the company |
|
Software Technology Division |
|
Accidental reuse of resource planning software |
|
4.1 faults per KLOC of new code, 0.9 for reused
code |
|
Overall fault rate decreased 51% |
|
Productivity increased 57% |
|
Cost $1 million, savings $4.1 million (1983–92) |
|
|
|
|
|
San Diego Technical Graphics (STG) |
|
Planned reuse of firmware for printers |
|
Cost $2.6 million, savings $5.6 million
(1987–94) |
|
24% reduction in faults |
|
40% increase in productivity |
|
Cost of developing reusable firmware—11% more |
|
Cost of reusing it—19% of developing from
scratch |
|
|
|
|
|
Ariane 5 rocket blew up 37 seconds after
lift-off |
|
Cost: $500 million |
|
Reason: attempt to convert 64-but integer into
16-bit unsigned integer, without Ada exception handler |
|
On-board computers crashed, so did rocket |
|
Conversion was unnecessary |
|
Computations on the inertial reference system
can stop 9 seconds before lift-off |
|
But, if there is a subsequent hold in countdown,
it takes several hours to reset the inertial reference system |
|
Computations therefore continue 50 seconds into
flight |
|
|
|
|
|
Cause of problem |
|
Ten years before, it was mathematically proven
that overflow was impossible—on the Ariane 4 |
|
Because of performance constraints, conversions
that could not lead to overflow were left unprotected |
|
Software was used, unchanged and untested, on
Ariane 5 |
|
But, the assumptions for the Ariane 4 no longer
held |
|
Lesson |
|
Software developed in one context needs to be
retested when integrated into another context |
|
|
|
|
|
|
|
NASA |
|
Most reused components were small |
|
Toshiba |
|
Many large components were reused |
|
GTE |
|
Many large components were reused |
|
|
|
Reason |
|
A strong managerial commitment for reuse is
needed |
|
|
|
|
|
Claim of CS/D |
|
Ideal module has functional cohesion |
|
Problem |
|
The data on which the module operates |
|
We cannot reuse a module unless the data are
identical |
|
|
|
|
|
Claim of CS/D: |
|
Next best module has informational cohesion |
|
This is an object (an instance of a class) |
|
An object comprises both data and action |
|
This promotes reuse |
|
|
|
|
|
|
|
Design reuse |
|
Library or toolkit |
|
Framework |
|
Design pattern |
|
Software architecture |
|
|
|
|
|
Set of reusable routines |
|
Examples: |
|
Scientific software |
|
GUI class library or toolkit |
|
The user is responsible for the control logic
(white in figure) |
|
|
|
|
Control logic of the design |
|
“Hot spots” (white in figure) |
|
Faster than reusing toolkit |
|
More of design is reused |
|
The logic is usually harder to design than the
operations |
|
|
|
|
A solution to a general design problem |
|
In the form of a set of interacting classes |
|
The classes need to be customized (white in
figure) |
|
|
|
|
Tool that uses the set of classes created by the
widget generator |
|
|
|
|
Abstract classes and abstract (virtual) methods |
|
The interfaces between client and program and
generator are abstract |
|
The application program is uncoupled from the
specific operating system |
|
|
|
|
|
Encompasses a wide variety of design issues,
including: |
|
Organization in terms of components |
|
How those components interact |
|
|
|
|
|
|
Architecture reuse can lead to large-scale reuse |
|
One mechanism: |
|
Software product lines |
|
Case study: |
|
Hewlett-Packard printers (1995 to 1998) |
|
Person-hours to develop firmware decreased by a
factor of 4 |
|
Time to develop firmware decreased by factor of
3 |
|
Reuse has increased to over 70% of components |
|
|
|
|
|
Reuse impacts maintenance more than development |
|
Assumptions |
|
30% of entire product reused unchanged |
|
10% reused changed |
|
|
|
|
|
|
|
|
|
|
|
Savings during maintenance are nearly 18% |
|
Savings during development are about 9.3% |
|
|
|
|
|
Reuse achieved |
|
Not via modules with functional cohesion, |
|
but via objects (informational cohesion)
[classes] |
|
In general |
|
Software costs have decreased |
|
Overall quality has improved |
|
Large products are essentially collection of
smaller products |
|
|
|
|
|
|
|
Learning curve |
|
Particularly noticeable with GUI |
|
Problems with inheritance |
|
New subclass does not affect its superclass |
|
But, any change to a superclass affects all its
subclasses |
|
Subclasses low in the inheritance tree can be
huge (inherited attributes) |
|
Polymorphism and dynamic binding |
|
Maintenance problems were already discussed |
|
|
|
|
|
Advantages far outweigh the problems |
|
Numerous refereed (e.g., [Capper et al., 1994])
and informal (OOPSLA Addendum) reports |
|
|
|
|
Product P: Machine M1 Op. Sys.
O1 Compiler C1 |
|
Need P': Machine M2 Op. Sys. O2 Compiler
C2 |
|
P is portable if it is cheaper to port P than to
write P' from scratch |
|
|
|
|
|
Hardware (disk, tape, characters, parity) |
|
Operating system (JCL, virtual memory) |
|
Numerical software (word size, Ada) |
|
Compiler |
|
FORTRAN |
|
Pascal |
|
COBOL |
|
C |
|
Ada |
|
C++ |
|
Java |
|
|
|
|
|
Difficulties hampering portability |
|
One-off software |
|
Hardware incompatibility |
|
Lifetimes of software, hardware |
|
Multiple copy software |
|
Portability saves money! |
|
|
|
|
|
|
Portable system software |
|
Isolate implementation-dependent pieces |
|
UNIX kernel, device-drivers |
|
Levels of abstraction |
|
Graphics |
|
|
|
|
|
Portable application software |
|
Use popular language |
|
Use popular operating system |
|
Adhere to language standards |
|
Avoid numerical incompatibilities |
|
Excellent documentation |
|
|
|
|
|
Portable data |
|
COBOL, Pascal versus ASCII files |
|
DBMS |
|
|
|
|
|
|
The mutual cooperation of object code |
|
From different vendors |
|
Written in different languages |
|
Running on different machines |
|
Example: |
|
Nation-wide network of ATMs |
|
Server runs database software |
|
Clients (ATMs) run C++ |
|
Communications software |
|
Security |
|
|
|
|
|
|
Common Microsoft mechanism for all component
services |
|
Within the same process |
|
Invocation |
|
Different processes on the same machine |
|
Interprocess communication |
|
Between different machines |
|
Remote process call (RPC) |
|
|
|
|
|
|
|
Each piece is implemented as a COM component (“object”) |
|
Each component has one or more interfaces |
|
Each interface supports one or more functions
(“methods”) |
|
The client calls the COM library and specifies |
|
The class of the component |
|
The specific interface |
|
The COM library instantiates the COM component |
|
|
|
|
|
COM uses object-oriented terminology |
|
Class |
|
Object |
|
Method |
|
However, COM is currently only object-based, not
object-oriented |
|
|
|
|
International standard architecture for
object-oriented systems |
|
Object request broker (ORB) allows client to
invoke a method of any object in the system |
|
“The mother of all client/server middleware” |
|
|
|
|
|
CORBA is an international standard |
|
Implemented on a wide variety of platforms |
|
COM is a Microsoft product |
|
Hard to use with non-Microsoft products |
|
Integration of COTS software is easier with COM |
|
Most COTS software is supplied by Microsoft |
|
CORBA is much simpler than COM |
|
|
|
|
COM and CORBA are currently the “big two” |
|
Other interoperability products may succeed,
such as JavaBeans |
|
Web-based applications need to be integrated
into client–server products |
|
XML (Extensible Markup Language) will probably
play a major role |
|